package com.xci.platform.auth.controller;

import com.xci.platform.auth.core.OnlineUser;
import com.xci.platform.auth.service.OnlineUserService;
import com.xci.platform.annotation.Authorize;
import com.xci.platform.core.BoolMessage;
import com.xci.platform.core.JsonGrid;
import com.xci.platform.helper.StringHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Map;

/**
 * 在线用户控制器
 */
@Authorize
@Slf4j
@Controller
@RequestMapping("/auth/onlineuser")
public class OnlineUserController extends AuthBaseController {
    /**
     * 系统在线用户服务
     */
    @Resource
    protected OnlineUserService onlineUserService;

    //region 页面视图

    /**
     * 在线用户首页
     */
    @GetMapping
    @Authorize(code = "SystemOnlineUser")//在线用户权限
    public String index() {
        return "auth/onlineuser/index";
    }

    /**
     * 在线用户详细页面
     */
    @GetMapping("/details")
    public String details(String id, ModelMap map) {
        OnlineUser entity = onlineUserService.get(id);
        if (entity == null) return notFound();
        map.put("entity", entity);
        return "auth/onlineuser/details";
    }

    //endregion

    //region 数据处理

    /**
     * 在线用户表格数据
     */
    @ResponseBody
    @GetMapping("/grid")
    @Authorize(code = "SystemOnlineUser.Search")//查询权限
    public JsonGrid grid(@RequestParam Map params) {
        return BoolMessage.grid(onlineUserService.queryPage(params));
    }

    /**
     * 激活用户
     */
    @ResponseBody
    @PostMapping("/active")
    public BoolMessage active() {
        onlineUserService.active(new OnlineUser(currentUser()));
        return BoolMessage.True;
    }

    /**
     * 注销在线用户
     */
    @ResponseBody
    @PostMapping("/logoff")
    @Authorize(code = "SystemOnlineUser.Logoff")//注销权限
    public BoolMessage logoff(String ids) {
        for (String id : StringHelper.splitToArray(ids)) {
            onlineUserService.logoff(id);
        }
        return BoolMessage.True;
    }

    //endregion
}
